package ar.edu.unsam.algo3.plantasvszombies.dominio

import ar.edu.unsam.algo3.plantasvszombies.exceptions.PlantasVsZombiesException
import java.util.ArrayList
import java.util.List
import org.uqbar.commons.utils.Observable

/**
 * Jardin (Tablero) en donde se desarrolla el juego Plantas Vs zombies.
 * Contiene las filas que son atacadas por zombies y defendidas por plantas.
 * @version 1.0, 2013
 * @author Marcos Benitez, Maxi Lopez Prieto, Sebastian Quintana
 */
@Observable
class Jardin {
	@Property List<Fila> filas = new ArrayList<Fila>
	@Property List<JardinZen> tiposPosibles
	@Property int lugaresPorFila = 5
	@Property int recursos = 1000
	@Property String jugador = "Jugador"

	val MAX_FILAS = 8

	/** 
     * Agrega una fila al jardin.
     * @param fila La fila que sera agregada al jardin.
     * @throws PlantasVsZombiesException Si se agregan mas filas que las permitidas.
     */
	def void agregarFila(Fila fila) {
		if(filas.size >= MAX_FILAS) throw new PlantasVsZombiesException("LLegaste al máximo de filas que podes tener")
		filas.add(fila)
		fila.jardin = this
	}

	/** 
     * Elimina una fila del jardin.
     * @param fila La fila que sera eliminada del jardin.
     * @throws PlantasVsZombiesException Si se intenta eliminar una fila que no pertenece a este jardin.
     */
	def eliminarFila(Fila fila) {
		if(!filas.contains(fila)) new PlantasVsZombiesException("La fila no pertenece al jardin")
		filas.remove(fila)
	}

	/** 
     * Devuelve la cantidad de filas que se pueden agregar.
     */
	def int getFilasDisponibles() {
		MAX_FILAS - filas.size
	}
}
